最後要教的是,如何利用Python實作MQTT訂閱(Subscribe)的部分,若還沒看前兩篇關於利用Python實作連線到MQTT Broker伺服器,和如何利用Python實作發布主題(Publish)的話,請各位讀者先回去看這兩篇文章,再來看這篇,一步一步的實作,相信各位讀者跟著文章操作都能有對MQTT實作基本的認識喔!
那廢話不多說,我們就來看一下要怎麼利用Pytnon實作訂閱的部分吧!
#定義訂閱函式
import paho.mqtt.client as mqtt
def subscribe(client, topic):
#定義回呼函式(Callback function),當客戶端在收到訊息後會自動呼叫這個函式
def on_message(client, userdata, msg):
print(f"收到 {msg.payload.decode('utf-8')} 來自 {msg.topic} 這個主題")
client.subscribe(topic) #訂閱主題
#將回呼函數指定到client這個實例的on_message的屬性上,使客戶端收到訊息時會自動呼叫該函數
client.on_message = on_message
#保持連線
client.loop_forever()
subscribe(client, "/home/plug")
import paho.mqtt.client as mqtt
def connect_MQTT_broker(broker_host, port):
def on_connect(client, userdata, flags, rc):
if (rc == 0):
print("連線成功")
else:
print(f'連線失敗, 錯誤代碼={rc}')
client = mqtt.Client()
client.on_connect = on_connect
client.connect(broker_host, port)
return client
def subscribe(client, topic):
def on_message(client, userdata, msg):
print(f"收到 {msg.payload.decode('utf-8')} 來自 {msg.topic} 這個主題")
client.subscribe(topic)
client.on_message = on_message
client.loop_forever()
iron_client_sub = connect_MQTT_broker("broker.emqx.io", 1883)
subscribe(iron_client_sub, "/home/plug")
訂閱客戶端這邊的執行結果會收到發布端的訊息
連線成功
收到 訊息: 0 來自 /home/plug 這個主題
收到 訊息: 1 來自 /home/plug 這個主題
收到 訊息: 2 來自 /home/plug 這個主題
收到 訊息: 3 來自 /home/plug 這個主題
收到 訊息: 4 來自 /home/plug 這個主題
收到 訊息: 5 來自 /home/plug 這個主題
收到 訊息: 6 來自 /home/plug 這個主題
收到 訊息: 7 來自 /home/plug 這個主題
收到 訊息: 8 來自 /home/plug 這個主題
收到 訊息: 9 來自 /home/plug 這個主題
.
.
.
讀者可以先運行訂閱客戶端,接下來在運行發布客戶端,訂閱客戶端就可以接收到完整的訊息囉!
恭喜各位讀者利用Python實作完成MQTT的連線了,各位讀者如有疑問或建議,歡迎在下方留言一起討論!
那下一篇將教大家如何利用Python與作業系統互動。